import { defineStore } from "pinia"


interface IStateRes {
    menus: Array<IMneuItem>
}

export const useMenusStroe = defineStore('menus', {
    state: (): IStateRes => {
        return {
            menus: []//用户 的 权限列表, 一旦登录了 就更新这里的数据
        };
    },
    getters: {
        sortedMenus: (state) => {
            let menus = [...state.menus]//深拷贝
            // 处理数组
            // 1. sort 把所有的一级菜单排在前面 , 二级菜单放在数组后面
            // 2. 进行排序之后的数组 循环遍历，判断数组项 parentId 是0 ， 增加一个字段 children,用来存放子菜单
            // 3. 判断数组项的parentID 是否不等于0 ，如果不等于0，说明有父级, 就要根据parentId去找父级，找到父级之后，将其push 进父级的 children 里面
            // 4. 对新数组进行过滤 ，只保留一级菜单，二级菜单就不需要了，因为已经push到了一级菜单的children 内
            // 5. 过滤 ，用id进行排序。
            menus.sort((a, b) => {
                return a.parentId-b.parentId;
            });
            menus.forEach((item) =>{
                //hidden == 0 说明 不隐藏
                if(item.hidden===0){
                    if(item.parentId === 0){
                        item.children=[];
                    }
                    const index = menus.findIndex((el) =>{
                        return el.id === item.parentId
                    });
                    if(index>-1){
                        menus[index].children?.push(item)
                    }
                }else{
                    item.children=[];
                    const index = menus.findIndex((el) =>{
                        return el.id === item.parentId
                    });
                        menus[index].children?.push(item)
                }
            })
            menus = menus.filter((item) =>{
                return item.parentId===0
            })
            menus.sort((a,b) =>{
                return a.id-b.id;
            })
            return menus
        }
    },
    actions: {
        updatedMenus(menu: IMneuItem[]) {
            this.menus = menu
        },
    }
})